//#include <iostream>
//#include <unistd.h>
//#include <signal.h>
//#include <unistd.h>
//
//void handler(int signo)
//{
//    std::cout << "获得一个2号信号" << std::endl;
//    exit(1);
//}
//
//int main()
//{
//    signal(2, handler);
//
//    while(true)
//    {
//        std::cout << "running...., pid : " << getpid() << std::endl;
//        sleep(1);
//    }
//}
// #include <iostream>
// #include <signal.h>
// #include <unistd.h>
 
// using namespace std;
 
// void catchsig(int signum)
// {
//     cout << "进程捕捉到了一个信号：" << signum << " "
//          << "pid"
//          << " " << getpid() << endl;
// }
 
// int main()
// {
//     signal(SIGINT, catchsig);
 
//     while (true)
//     {
//         cout << "我是一个进程，我正在运行"
//              << " "
//              << "pid"
//              << " " << getpid() << endl;
//         sleep(1);
//     }
 
//     return 0;
// }

// #include <iostream>
// #include <signal.h>
// #include <unistd.h>
 
// using namespace std;
 
// void catchsig(int signum)
// {
//     cout << "进程捕捉到了一个信号：" << signum << " "
//          << "pid"
//          << " " << getpid() << endl;
// }
 
// int main()
// {
//     signal(SIGQUIT, catchsig);
 
//     while (true)
//     {
//         cout << "我是一个进程，我正在运行"
//              << " "
//              << "pid"
//              << " " << getpid() << endl;
//         sleep(1);
 
//         int a = 100;
//         a /= 0;
//     }
 
//     return 0;
// }

// #include <iostream>
// #include <signal.h>
// #include <assert.h>
// #include <unistd.h>
 
// using namespace std;
 
// void hander(int signum)
// {
//     cout << "pid: " << getpid() << " "
//          << "获取了一个信号: " << signum << endl;
// }
 
// int main()
// {
//     struct sigaction sig;
//     struct sigaction osig;
//     sigemptyset(&sig.sa_mask);
//     sigemptyset(&osig.sa_mask);
//     sig.sa_flags = 0;
//     sig.sa_handler = hander;
 
//     sigaction(2, &sig, &osig);
 
//     while (true)
//         sleep(1);
 
//     return 0;
// }

// #include <iostream>
// #include <signal.h>
// #include <assert.h>
// #include <unistd.h>
 
// using namespace std;
 
// static void showpending(sigset_t &set)
// {
//     for (int sig = 1; sig <= 31; sig++)
//     {
//         if (sigismember(&set, sig))
//             cout << "1";
//         else
//             cout << "0";
//     }
//     cout << endl;
// }
 
// void hander(int signum)
// {
//     cout << "获取了一个信号: " << signum << endl;
//     cout << "获取了一个信号: " << signum << endl;
//     cout << "获取了一个信号: " << signum << endl;
//     cout << "获取了一个信号: " << signum << endl;
//     cout << "获取了一个信号: " << signum << endl;
 
//     sigset_t pending;
//     int c = 20;
//     while (true)
//     {
//         sigpending(&pending);
//         showpending(pending);
//         c--;
//         if (!c)
//             break;
//         sleep(1);
//     }
// }
 
// int main()
// {
//     cout << "pid: " << getpid() << " " << endl;
//     struct sigaction sig;
//     struct sigaction osig;
//     sigemptyset(&sig.sa_mask);
//     sigemptyset(&osig.sa_mask);
//     sig.sa_flags = 0;
//     sig.sa_handler = hander;
 
//     sigaddset(&sig.sa_mask, 3);
//     sigaddset(&sig.sa_mask, 4);
//     sigaddset(&sig.sa_mask, 5);
 
//     sigaction(2, &sig, &osig);
 
//     while (true)
//         sleep(1);
 
//     return 0;
// }

#include <iostream>
// #include <signal.h>
// #include <unistd.h>
 
// using namespace std;
 
// int flag = 0;
 
// void hander(int signum)
// {
//     (void)signum;
//     cout << "change flag: " << flag;
//     flag = 1;
//     cout << "->" << flag << endl;
// }
 
// int main()
// {
//     signal(2, hander);
//     while (!flag);
//     cout << "进程退出后flag: " << flag << endl;
//     return 0;
// }


#include <signal.h>
#include <unistd.h>
 
using namespace std;
 
int main()
{
    signal(SIGCHLD, SIG_IGN);
    pid_t id = fork();
    if (id == 0)
    {
        // 子进程
        cout << "我是子进程: pid: " << getpid() << endl;
        sleep(10);
        exit(0);
    }
    while (true)
    {
        cout << "我是父进程: pid: " << getpid() << endl;
        sleep(1);
    }
 
    return 0;
}